\documentclass[a4paper]{report}
\usepackage{geometry}
\usepackage{fullpage}
\usepackage{amsmath}
\usepackage{lscape}
\usepackage{fancyvrb}
\usepackage{parskip}
\usepackage{enumerate}
\usepackage{framed}
\usepackage[utf8]{inputenc}
\usepackage{fancyhdr}
\usepackage[UTF8]{ctex}

\usepackage{tikz}
\usetikzlibrary{positioning, calc, shapes.geometric, shapes, shapes.multipart, arrows.meta, arrows, decorations.markings, external, trees}

\usepackage{hyperref}
\hypersetup{
	colorlinks=true,
	linkcolor=black,
	filecolor=black,      
	urlcolor=blue,
}

\pagestyle{fancy}
\fancyhf{}
\lfoot{连享会}
\rfoot{\thepage}
\renewcommand{\headrulewidth}{0pt}

\title{使用LaTex绘制有向无环图 (DAG)}
\author{译制：左祥太(武汉纺织大学)\\原作：Eleanor Murray (\url{github.com/eleanormurray}) }

\begin{document}
\maketitle

\tableofcontents
	
\chapter{设置你的LaTex风格}

\vspace{3mm}


为了更好地呈现DAG的图形，可以预先按照以下代码格式设置你的LaTex风格。（我使用的是TexStudio+TexLive的组合，默认宏包里面有tikzpicture，没有的小伙伴记得提前安装这一块的宏包）

\vspace{3mm}
\begin{Verbatim}[frame=single]
Install the package tikzpicture, with the following libraries:
\usepackage{tikz}
\usetikzlibrary{positioning, calc, shapes.geometric, shapes.multipart, 
	shapes, arrows.meta, arrows, 
	decorations.markings, external, trees}
	
Create custom arrow style:
\tikzstyle{Arrow} = [
thick, 
decoration={
	markings,
	mark=at position 1 with {
	\arrow[thick]{latex}
	}
}, 
shorten >= 3pt, preaction = {decorate}
					]
	
\end{Verbatim}

\tikzstyle{Arrow} = [
thick, 
decoration={
	markings,
	mark=at position 1 with {
		\arrow[thick]{latex}
	}
}, 
shorten >= 3pt, preaction = {decorate}
]

\vspace{3mm}	
按照上述方式进行规划之后，你将会得到这个样子的箭头:
\begin{tikzpicture}[]
	\node[] at (0,0) {};
	\draw[Arrow](0,0)--(2,0);
\end{tikzpicture}

\vspace{3mm}

为了更加便于读者的理解，现对后续的变量做出进一步的定义:
\begin{itemize}
	\item 对于我们所感兴趣的因果效应中的治疗、暴露、干预其他解释变量用A表示。
	\item 结果或者其他被解释变量用Y表示
	\item 已知的协变量等用L表示
	\item 位置的协变量用U表示
	\item 删减、选择、随访损失或退出用C表示
	\item 用下标索引标记不同的时间点
	\item 用上标索引标记受到关注的反事实变量
\end{itemize}

\vspace{5mm}	

\chapter{有向无环图 (DAG)}
有向无环图(DAG)是评估变量之间的假设关系的工具，即这些变量在给定的研究或分析中造成偏差的可能性。它们是设计研究或分析、评估意外结果的潜在原因、或讲解因果推断的有用工具。
\vspace{3mm}

在因果推断中常用的DAG有两种类型:
\begin{itemize}
	\item 统计学DAG只包含测量的或已知的变量;
	\item 因果DAG包含所有感兴趣的变量与更多感兴趣的变量的所有共同潜在变量，即使这些变量的身份未知。
\end{itemize}
\vspace{3mm}

DAG通常也通过从左（过去）到右（未来或现在）或从上（过去）到下（未来或现在）的时间排序表示时间流。这里的DAG使用的是从左到右的时间排序。 

\vspace{3mm}

\section{统计学DAG}
统计学DAG用于展示有关于已知变量之间关联的概念。在统计DAG中，箭头意味着潜在的关联，可能是也可能不是因果关系。在统计DAG中，任何没有被箭头连接的变量都是已知或假定没有关联的。

统计DAG可以使用机器学习或其他统计技术从数据中收集并建立，但不应该被用来确定两个变量是否有因果关系。

\subsection{单点暴露的统计DAG}
下面两个DAG代表最简单的统计DAG，只有两个变量，一个是暴露或治疗变量$A$，一个是结果或因变量$Y$。第一个DAG代表的假设是：暴露和结果之间没有关联（即$E[Y|A=a]=E[Y|A=a']$）。第二个DAG包括$A$和$Y$之间的一个箭头，因此允许暴露和结果之间有关联的可能性，但不要求这个关联存在。

\vspace{3mm}

\begin{framed}
\verb|DAG 1 - 无效假设:|
	
\begin{tikzpicture}
	\node (1) {A};
	\node [right =of 1] (2) {Y};
\end{tikzpicture}
	
\begin{Verbatim}
Code for DAG 1:
		
\begin{tikzpicture}
\node (1) {A};
\node [right =of 1] (2) {Y};
\end{tikzpicture}
		
\end{Verbatim}
	
\verb|DAG 2 - 无假设:|
	
\begin{tikzpicture}
\node (1) {A};
\node [right =of 1] (2) {Y};
		
\draw[Arrow] (1.east) -- (2.west);
\end{tikzpicture}
	
\begin{Verbatim}
Code for DAG 2:
		
\begin{tikzpicture}
\node (1) {A};
\node [right =of 1] (2) {Y};
			
\draw[Arrow] (1.east) -- (2.west);
\end{tikzpicture}
		
\end{Verbatim}
\end{framed}

\vspace{3pt}

\subsubsection{有混杂因素的统计DAG}
在下一个DAG中，我们增加了一个已知的混杂因素，$L$--即一个与暴露和结果相关的变量，并且在时间上先于两者发生，因此它可以解释暴露和结果之间检测到的任何虚假（非因果）关联。$L$也可以代表一组与$A$和$Y$有类似关系的混杂变量。下面的DAG是在假设无效假设为真的情况下绘制的。

\vspace{3mm}

\begin{framed}
\verb|DAG:|
	
\begin{tikzpicture}
\node  (2) {L};
\node [right =of 2] (3) {A};
\node [right =of 3] (4) {Y};
		
\draw[Arrow] (2.east) -- (3.west);
\draw[Arrow] (2) to [out=25, in=160] (4); 
\end{tikzpicture}
	
\begin{Verbatim}
Code:
		
\begin{tikzpicture}
\node (1) {L};
\node [right =of 1] (2) {A};
\node [right =of 2] (3) {Y};
			
\draw[Arrow] (1.east) -- (2.west);
\draw[Arrow] (1) to [out=25, in=160] (3);
\end{tikzpicture}
		
\end{Verbatim}
\end{framed}

\vspace{5mm}

\subsubsection{对一个混杂因素进行限制的统计DAG}

在这个DAG中，$L$周围有一个方框，表示变量$L$已被限制在某一组数值内，或者在分析中已被统计调整。下面的DAG是在假设无效假设为真的情况下绘制的。代码中唯一不同的是，我们在第一个节点周围画了一个矩形。然而，DAG现在编码的假设是，在任何以$L$为条件或限制的分析中，暴露和结果都不会有关联。

\vspace{3mm}

\begin{framed}
\verb|DAG:|
	
\begin{tikzpicture}
\node [rectangle, draw] (1) {L};
\node [right =of 1] (2) {A};
\node [right =of 2] (3) {Y};
		
\draw[Arrow, thick] (1.east) -- (2.west);
\draw[Arrow, thick] (1) to [out=25, in=160] (3); 
\end{tikzpicture}
	
\begin{Verbatim}
		
Code:
		
\begin{tikzpicture}
\node [rectangle, draw] (1) {L};
\node [right =of 1] (2) {A};
\node [right =of 2] (3) {Y};
			
\draw[Arrow, thick] (1.east) -- (2.west);
\draw[Arrow, thick] (1) to [out=25, in=160] (3); 
\end{tikzpicture}
		
\end{Verbatim}
\end{framed}

\vspace{3mm}
\subsubsection{对碰撞点进行限制统计DAG}

在这个DAG中，有一个额外的变量$C$，用于审查或失去跟踪。由于我们通常只有留在研究中的个体的数据，对于我们有数据的所有个体来说，$C$等于0（未删减），因此根据定义是受限制的。因此，在任何有删减的DAG中，C周围应该有一个方框来表示这种限制。

请注意，当我们以暴露的下游后果为条件时，我们就会产生碰撞点偏差的可能性。因此，从我们以$C$为条件或限制的数据中创建的统计DAG很可能会检测到暴露和结果之间的关联。这种可能性在统计DAG中由$A$和$Y$之间的一个箭头表示。如果我们省略了从$A$到$Y$的这个箭头，我们就是在做一个非信息删减的假设。这相当于假设任何有缺失结果信息的观察值是完全随机缺失的（MCAR）。

下面的DAG是在假设无效假设为真的情况下绘制的。

\vspace{3mm}

\begin{framed}
\verb|DAG:|
	
\begin{tikzpicture}
\node (1) {A};
\node [rectangle, draw, right =of 1] (2) {C};
\node [right =of 2] (3) {Y};
		
\draw[Arrow, thick] (1) to [out=25, in=160] (3); 
\draw[Arrow, thick] (1.east) -- (2.west);
\end{tikzpicture}
	
\begin{Verbatim}
		
Code:
		
\begin{tikzpicture}
\node (1) {A};
\node [rectangle, draw, right =of 1] (2) {C};
\node [right =of 2] (3) {Y};
			
\draw[Arrow, thick] (1) to [out=25, in=160] (3); 
\draw[Arrow, thick] (1.east) -- (2.west);
\end{tikzpicture}
	
\end{Verbatim}
\end{framed}

\vspace{3mm}

\subsection{持续性暴露的统计学DAG}

当数据是纵向的并且在多个时间点上可用时，DAG必须在每个时间点上为每个变量设置单独的节点，以便保持非周期性并避免循环，时间点可以用下标来表示。

这里有一个随时间变化的混杂因素$L$，它也受先前治疗的影响。如果分析不对所有时间点的$L$进行调整，就会出现因混杂而产生的偏差。然而，如果分析通过简单的基于分层的回归分析在所有时间点上对$L$进行调整，则可能会因在$L_k$的碰撞点上进行调节而出现偏差。

下面的DAG是一个完整的DAG，假设无效假设为真，也就是说，除了直接从每个处理方法$A$到结果$Y$的箭头外，所有可能的箭头都存在。然而，如果存在混杂因素$L_k$和结果的任何共同原因，那么任何试图仅从数据中创建这个统计DAG的做法都将导致在所有时间点上观察到$A$和$Y$之间的关联。

为简单起见，在下面的DAG中省略了$Y_k$，$Y_{k+1}$可以被认为是随访结束时结果的累积概率（发病率）的指标。


\vspace{3mm}

\begin{framed}
	
\verb|DAG: |
	
\begin{tikzpicture}
\node (1) {L$_{k-1}$};
\node [right =of 1] (2) {A$_{k-1}$};
\node [right =of 2] (3) {L$_{k}$};
\node [right =of 3] (4) {A$_{k}$};
\node [right =of 4] (5) {Y$_{k+1}$};
		
\draw[Arrow, thick] (1.east) -- (2.west); 
\draw[Arrow, thick] (1) to [out=25, in=160] (3);
\draw[Arrow, thick] (1) to [out=25, in=160] (4); 
\draw[Arrow, thick] (1) to [out=25, in=160] (5);
		
\draw[Arrow, thick] (2.east) -- (3.west);
\draw[Arrow, thick] (2) to [out=25, in=160] (4); 
		
\draw[Arrow, thick] (3.east) -- (4.west);
\draw[Arrow, thick] (3) to [out=25, in=160] (5); 
\end{tikzpicture}
	
\begin{Verbatim}
		
Code:
		
\begin{tikzpicture}
\node (1) {L$_{k-1}$};
\node [right =of 1] (2) {A$_{k-1}$};
\node [right =of 2] (3) {L$_{k}$};
\node [right =of 3] (4) {A$_{k}$};
\node [right =of 4] (5) {Y$_{k+1}$};
			
\draw[Arrow, thick] (1.east) -- (2.west); 
\draw[Arrow, thick] (1) to [out=25, in=160] (3);
\draw[Arrow, thick] (1) to [out=25, in=160] (4); 
\draw[Arrow, thick] (1) to [out=25, in=160] (5);
			
\draw[Arrow, thick] (2.east) -- (3.west);
\draw[Arrow, thick] (2) to [out=25, in=160] (4); 
			
\draw[Arrow, thick] (3.east) -- (4.west);
\draw[Arrow, thick] (3) to [out=25, in=160] (5); 
\end{tikzpicture}

\end{Verbatim}
\end{framed}

\newpage
\section{因果DAG}
因果DAG编码了对相关变量之间因果关系的图像。在因果DAG中，变量之间的箭头意味着潜在的因果关系。在因果DAG中，任何没有被箭头连接的变量都是已知的或假定的缺乏因果关系，当两个变量已知有关联但不被认为有因果关系时，就用一个未知变量$U$来表示。

\subsection{单点暴露的因果DAG}
下面的DAG代表最简单的因果DAG，只有两个已知变量，一个是暴露或治疗变量$A$，一个是结果或因变量$Y$。与统计学DAG不同，第一个因果DAG并不代表暴露和结果之间没有关联的零假设是真的（即$E[Y|A=a]=E[Y|A=a']$），因为由于$U$的混杂作用，可以观察到关联。相反，第一个因果DAG代表（更强的）假设，即暴露和结果之间没有因果关系的无效假设是真的（即$E[Y^{a}|A=a]=E[Y^{a'}|A=a']$）。

第二个DAG不做这些假设中的任何一个--这个DAG包括$A$和$Y$之间的箭头，以及一个未知的共同原因$U$，因此允许暴露和结果之间存在因果关系或非因果关系的可能性，但不要求这两者都存在。

\vspace{3mm}

\begin{framed}
\verb|DAG 1 - 无效假设:|
	
\begin{tikzpicture}
\node (1) {A};
\node [right =of 1] (2) {Y};
\node [left =of 1] (3) {U};
		
\draw[Arrow] (3.east) -- (1.west);
\draw[Arrow] (3) to [out=25, in=160] (2); 
\end{tikzpicture}
	
\begin{Verbatim}
Code for DAG 1:
		
\begin{tikzpicture}
\node (1) {A};
\node [right =of 1] (2) {Y};
\node [left =of 1] (3) {U};
			
\draw[Arrow] (3.east) -- (1.west);
\draw[Arrow] (3) to [out=25, in=160] (2); 
\end{tikzpicture}
		
\end{Verbatim}
	
\verb|DAG 2 - 无假设:|
	
\begin{tikzpicture}
\node (1) {A};
\node [right =of 1] (2) {Y};
\node [left =of 1] (3) {U};
		
\draw[Arrow] (1.east) -- (2.west);
\draw[Arrow] (3.east) -- (1.west);
\draw[Arrow] (3) to [out=25, in=160] (2); 
\end{tikzpicture}
	
\begin{Verbatim}
Code for DAG 2:
		
\begin{tikzpicture}
\node (1) {A};
\node [right =of 1] (2) {Y};
\node [left =of 1] (3) {U};
			
\draw[Arrow] (1.east) -- (2.west);
\draw[Arrow] (3.east) -- (1.west);
\draw[Arrow] (3) to [out=25, in=160] (2); 
\end{tikzpicture}
		
\end{Verbatim}
\end{framed}

\vspace{3pt}

\subsubsection{有混杂因素的因果DAG}

任何因果DAG必须包括DAG上任何两个变量的所有可能的共同原因。在最简单的情况下，所有的混杂物都是已知的，混杂物的统计DAG将与混杂物的因果DAG相同。在更复杂的情况下，混杂的因果DAG可以包括$A$和$Y$、$L$和$A$以及/或$L$和$Y$的其他未知共同原因。

\vspace{3mm}

\begin{framed}
\verb|DAG:|
	
\begin{tikzpicture}
\node  (2) {L};
\node [right =of 2] (3) {A};
\node [right =of 3] (4) {Y};
\node [left =of 2] (5) {U$_1$};
\node [below =of 5] (6) {U$_2$};
\node [below =of 2] (7) {U$_3$};
		
\draw[Arrow] (2.east) -- (3.west);
\draw[Arrow] (2) to [out=25, in=160] (4); 
		
\draw[Arrow] (5.east) -- (2.west);
\draw[Arrow] (5) to [out=25, in=160] (4);
		
\draw[Arrow] (6.north) -- (2.south);
\draw[Arrow] (6.north) -- (3.south);
		
\draw[Arrow] (7.north) -- (3.south);
\draw[Arrow] (7.north) -- (4.south);  
\end{tikzpicture}
	
\begin{Verbatim}
Code:
		
\begin{tikzpicture}
\node (1) {L};
\node [right =of 1] (2) {A};
\node [right =of 2] (3) {Y};
\node [left =of 2] (5) {U$_1$};
\node [below =of 5] (6) {U$_2$};
\node [below =of 2] (7) {U$_3$};
			
\draw[Arrow] (2.east) -- (3.west);
\draw[Arrow] (2) to [out=25, in=160] (4); 
			
\draw[Arrow] (5.east) -- (2.west);
\draw[Arrow] (5) to [out=25, in=160] (4);
			
\draw[Arrow] (6.north) -- (2.south);
\draw[Arrow] (6.north) -- (3.south);
			
\draw[Arrow] (7.north) -- (3.south);
\draw[Arrow] (7.north) -- (4.south);
\end{tikzpicture}
		
\end{Verbatim}
\end{framed}

\vspace{3mm}
\subsubsection{对碰撞点进行限制的因果DAG}

如同有对撞点的统计DAG，因果DAG有一个额外的变量$C$，用于删减或失去跟踪的值。由于我们通常只有留在研究中的个体的数据，对于我们有数据的所有个体来说，$C$等于0（未删减），因此根据定义是受限制的。因此，在任何有删减的DAG中，$C$周围应该有一个方框来表示这种限制。

与统计DAG不同，因果DAG还包括$C$和$Y$的未知共同原因。大多数有删减或随访损失的研究可能有一些已知或未知的删减和结果的共同原因。从因果DAG中省略$U$（或其他一些已知的共同原因），就会产生非信息性删减或结果信息完全随机缺失的假设（MCAR）。通过包括$U$，我们放松了这个（强）假设，而允许删减是有信息的。如果我们能够识别和测量$U$，那么我们就可以对删减过程进行调整，现在只假设结果是随机缺失的（MAR），或者删减是有条件的非信息性的。

请注意，由于$C$是$A$和$U$的共同效应，所以C是一个碰撞器。因此，不考虑U的数据分析将导致A和Y之间通过A$\rightarrow$C$\leftarrow$U$\rightarrow$L的路径产生人为的（非因果关联，而这一路径是通过限制碰撞点C而打开的。



\vspace{3mm}

\begin{framed}
\verb|DAG:|
	
\begin{tikzpicture}
\node (1) {A};
\node [rectangle, draw, right =of 1] (2) {C};
\node [right =of 2] (3) {Y};
\node [below =of 1] (4) {U}; 
		
\draw[Arrow, thick] (1.east) -- (2.west);
\draw[Arrow, thick] (4.east) -- (2.west); 
\draw[Arrow, thick] (4.east) -- (3.west); 
\end{tikzpicture}
	
\begin{Verbatim}
		
Code:
		
\begin{tikzpicture}
\node (1) {A};
\node [rectangle, draw, right =of 1] (2) {C};
\node [right =of 2] (3) {Y};
\node [below =of 1] (4) {U}; 
			
\draw[Arrow, thick] (1.east) -- (2.west);
\draw[Arrow, thick] (4.east) -- (2.west); 
\draw[Arrow, thick] (4.east) -- (3.west); 
\end{tikzpicture}
	
\end{Verbatim}
\end{framed}

\vspace{3mm}

\subsection{持续暴露的因果DAG}

当数据是纵向的并且在多个时间点上可用时，DAG必须在每个时间点上为每个变量设置单独的节点，以便保持非周期性并避免循环。时间点可以用下标来表示。

这里有一个随时间变化的混杂因素，$L$，它也受先前治疗的影响。如果分析不对所有时间点的$L$进行调整，就会出现因混杂而产生的偏差。然而，如果分析通过简单的基于分层的回归分析在所有时间点上对$L$进行调整，则可能会因在$L_k$的碰撞点上的条件而产生偏差。

在因果DAG中，我们通过包括$L$和$Y$的一个或多个共同原因来表示这种潜在的偏差。在这里，我们做了一个最简单的假设，即在所有时间点上，一个单一的、基线的原因（或一组原因）会影响$L$和$Y$。

下面的DAG是一个完整的DAG，假设无效假设为真，也就是说，除了直接从每个治疗方法$A$到结果$Y$的箭头，所有可能的箭头都存在。

为简单起见，在下面的DAG中省略了Y$_k$，Y$_{k+1}$可以被认为是随访结束时结果的累积概率（发病率）的指标。

\newpage

\begin{framed}
	
\verb|DAG: |
	
\begin{tikzpicture}
\node (1) {L$_{k-1}$};
\node [right =of 1] (2) {A$_{k-1}$};
\node [right =of 2] (3) {L$_{k}$};
\node [right =of 3] (4) {A$_{k}$};
\node [right =of 4] (5) {Y$_{k+1}$};
\node [below =of 1] (6) {U};
		
\draw[Arrow, thick] (1.east) -- (2.west); 
\draw[Arrow, thick] (1) to [out=25, in=160] (3);
\draw[Arrow, thick] (1) to [out=25, in=160] (4); 
\draw[Arrow, thick] (1) to [out=25, in=160] (5);
		
\draw[Arrow, thick] (2.east) -- (3.west);
\draw[Arrow, thick] (2) to [out=25, in=160] (4); 
		
\draw[Arrow, thick] (3.east) -- (4.west);
\draw[Arrow, thick] (3) to [out=25, in=160] (5); 
		
\draw[Arrow, thick] (6.north) -- (1.south);   
\draw[Arrow, thick] (6.east) -- (3.south);
\draw[Arrow, thick] (6.east) -- (5.south);
\end{tikzpicture}
	
\begin{Verbatim}
		
Code:
		
\begin{tikzpicture}
\node (1) {L$_{k-1}$};
\node [right =of 1] (2) {A$_{k-1}$};
\node [right =of 2] (3) {L$_{k}$};
\node [right =of 3] (4) {A$_{k}$};
\node [right =of 4] (5) {Y$_{k+1}$};
\node [below =of 1] (6) {U};

\draw[Arrow, thick] (1.east) -- (2.west); 
\draw[Arrow, thick] (1) to [out=25, in=160] (3);
\draw[Arrow, thick] (1) to [out=25, in=160] (4); 
\draw[Arrow, thick] (1) to [out=25, in=160] (5);
			
\draw[Arrow, thick] (2.east) -- (3.west);
\draw[Arrow, thick] (2) to [out=25, in=160] (4); 
			
\draw[Arrow, thick] (3.east) -- (4.west);
\draw[Arrow, thick] (3) to [out=25, in=160] (5); 
			
\draw[Arrow, thick] (6.north) -- (1.south);   
\draw[Arrow, thick] (6.east) -- (3.south);
\draw[Arrow, thick] (6.east) -- (5.south);
\end{tikzpicture}
		
\end{Verbatim}
\end{framed}

\newpage
\section{注释DAG的箭头}
当使用DAGs示意偏见时，有时需要对箭头进行注释，以表明偏见的方向是积极的或消极的，可能会有助于记忆与理解。该代码通过在每个箭头的中点上方或下方放置一个新的文本节点来为DAG箭头添加标签或注释。

在下面的例子中，混杂因素$L$与结果$Y$呈负相关，与暴露$A$呈正相关，如果在分析中不控制$L$，则$A$与$Y$之间的估计关联会出现负（或下）的偏差。

\vspace{3mm}

\begin{framed}
\verb|DAG:|
	
\begin{tikzpicture}
\node  (2) {L};
\node [right =of 2] (3) {A};
\node [right =of 3] (4) {Y};
		
\draw[Arrow] (2.east) -- (3.west) node[midway, below]{$+$};
\draw[Arrow] (2) to [out=25, in=160]  node[midway, above] {$-$} (4);
\draw[Arrow] (3.east) --(4.west) node[midway, below] {$-$};
\end{tikzpicture}
	
\begin{Verbatim}
Code:
		
\begin{tikzpicture}
\node (1) {L};
\node [right =of 1] (2) {A};
\node [right =of 2] (3) {Y};
			
\draw[Arrow] (2.east) -- (3.west) node[midway, below]{$+$};
\draw[Arrow] (2) to [out=25, in=160] node[midway, above]{$-$} (4) ;
\draw[Arrow] (3.east) --(4.west) node[midway, below] {$-$};
\end{tikzpicture}
		
\end{Verbatim}
\end{framed}

\vspace{3mm}	

\chapter{总结}	
现在你已经完全的学会了使用LaTex来进行有向无环图的各种绘画方式，同样地，除了利用LaTex绘制DAG之外，原文档的作者Eleanor Murray也同样提供了很多很有用的，用于绘制因果关系图的LaTex代码，详情请见\url{github.com/eleanormurray}
	
\end{document}